assert

<cassert>

评估断言

如果这个函数形式的宏的参数表达式等于 0(例如 expression 等于 false),那么编译器会调用 abort 函数来终止程序,并将消息写入标准错误设备。

expression

expression 会被评估。如果这个 expression 等于 0,则会导致断言失败,并终止程序。

因此,assert 的设计是用来捕捉程序错误的,而不是用户或者运行时错误,在程序退出调试阶段后,通常都会使用 NDEBUG 来关闭这个宏。

  1. /* assert example */
  2. #include <assert.h> /* assert */
  3. {
  4. assert(myInt != NULL);
  5. printf("%d\n", *myInt);
  6. }
  7. int main()
  8. {
  9. int a = 0;
  10. int * c = NULL;
  11. b = &a;
  12. print_number(b);
  13. print_number(c);
  14. return 0;

在这个例子中,如果 print_number 使用一个空指针作为参数被调用,那么assert 会终止程序执行。这种情况发生在第二次调用 时,它触发了一个断言失败,提示了bug的存在。